#define _CRT_SECURE_NO_WARNINGS
#include "athlete.h"
#include <stdio.h>
#include <string.h>
#include "admin.h"
#pragma once
// 运动员的二级菜单
void athlete(char* athleteCode);

// 运动员查询自己的所有比赛信息
void query_my_match(char* athleteCode) {
    FILE* file = fopen("d:\\project\\athlete.txt", "r");
    if (!file) {
        perror("无法打开文件");
        return;
    }

    int code;  // 比赛代码
    int score;  // 得分
    int status;  // 审核状态
    char name[20];  // 比赛名

    int i = 0;
    while (fscanf(file, "%d %d %d %s", &code, &score, &status, name) != EOF) {
        if (strcmp(athleteCode, name) == 0) {
            if(i==0)
                printf("\n你已进行的比赛成绩如下：\n");
            printf("比赛代码：%d\n", code);
            char name[20];
            getGameNameByCode(code,name);
            printf("比赛名称：%s\n", name);
            printf("比赛得分：%d\n\n", score);
            i++;
        }
    }
    if(i==0)
        printf("没有找到你参加的比赛信息。\n");
    fclose(file);
}



// 查询自己的积分名词和总得分
typedef struct {
    char studentCode[20]; // 学号
    int totalScore;       // 总得分
} AthleteScore;
void query_my_rank(char* athleteCode) {
    FILE* file = fopen(ATHLETETXT, "r");
    if (file == NULL) {
        printf("文件打开失败\n");
        return;
    }

    // 存储所有运动员得分的数组
    AthleteScore scores[100]; // 假设最多100个运动员
    int count = 0;

    // 读取文件数据
    while (!feof(file)) {
        int projectCode, score, statusCode;
        char studentId[20];

        if (fscanf(file, "%d %d %d %s", &projectCode, &score, &statusCode, studentId) == 4) {
            // 查找是否是指定学号
            if (strcmp(studentId, athleteCode) == 0) {
                // 查找该运动员是否已记录过得分
                int found = 0;
                for (int i = 0; i < count; i++) {
                    if (strcmp(scores[i].studentCode, athleteCode) == 0) {
                        scores[i].totalScore += score; // 累加得分
                        found = 1;
                        break;
                    }
                }
                // 如果没有记录，则新增一条
                if (!found) {
                    strcpy(scores[count].studentCode, athleteCode);
                    scores[count].totalScore = score;
                    count++;
                }
            }
        }
    }

    fclose(file); // 关闭文件

    // 输出该运动员的总得分
    printf("你的总得分排名如下：\n学号: %s\n总得分: %d\n", athleteCode, scores[0].totalScore);

    // 计算排名
    int ranking = 1;
    for (int i = 0; i < count; i++) {
        if (scores[i].totalScore > scores[0].totalScore) {
            ranking++;
        }
    }

    printf("总得分排名: %d\n\n", ranking);
}

// 运动员申诉
void athleteQuestioning(char* athleteCode) {
    int sportCode;
    while (1) {
        printf("你要对哪个比赛项目进行申诉？请输入对应比赛编号\n查看你的项目请输入0\n退出请输入-1\n>>>");
        if (scanf("%d", &sportCode) != 1) { // 输入验证
            while (getchar() != '\n'); // 清空输入缓冲区
            printf("\n请输入有效的数字\n");
            continue;
        }

        if (sportCode == -1) { // 退出到上级菜单
            break;
        }

        if (sportCode == 0) {
            query_my_match(athleteCode);
            continue;
        }
        int statusCode;
        if (isGameExist(sportCode)) {
            switch (isMoreThanOneHour(sportCode))
            {
            case 0:
                statusCode = getStatusCode(athleteCode, sportCode);
                switch (statusCode) {
                case 0:
                    updateStatusCode(athleteCode, sportCode, 1);
                    printf("\n申诉成功！请等待院管理员审核\n\n");
                    break;
                case 1:
                    printf("\n你已经提交过申诉，请等待院管理员审核\n\n");
                    break;
                case 2:
                case 3:
                case 4:
                    printf("你的申诉已提交总管理员处理，请耐心等待\n\n");
                    break;
                case 5:
                    printf("你的申诉已被驳回，现不可修改\n\n");
                    break;
                case 6:
                    printf("你的成绩已经更改\n\n");
                    break;
                default:
                    printf("未知状态码，请联系管理员\n\n");
                    break;
                }
                break;
            case -1:
                printf("\n请等待总管理员确认成绩，当前时间不可申诉\n");
                break;
            case 1:
                printf("\n已超出公示期，不可申诉！\n");
                break;
            case -2:
                printf("\n未找到相关记录，请联系管理员\n");
                break;
            case -3:
                printf("\n未找到相关文件，请联系管理员\n");
                break;
            default:
                printf("未知错误，请联系管理员\n");
                break;
            }
        }
        else {
            printf("该比赛不存在，请重新输入！\n");
        }
    }
}
